package com.amumu.drama.common.base.annonation;


import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;

import java.lang.annotation.*;

/**
 * <pre>
 * 标记当Spring完成初始化【所有的】托管bean后，在各bean中需要执行的方法（要求不
 * 能有任何参数）方法调用顺序按在源码中书写的顺序
 *
 * etna将按类路径全名的字典序（etna框架的类优先），调用这些方法
 * 对执行顺序有要求的请务必要注意这一点！
 *
 * 相关注解的处理顺序：
 *
 * 【服务器启动】
 *
 * 1、初始化Spring，开始逐个实例化托管bean
 *
 * 2、Srping开始实例化【一个】托管bean
 *
 * 1、如果托管bean是单例的（默认单例），将返回启动时初始化好的对象
 *
 * 2、如果是非单例bean，即在xml里面设置scope为prototype
 *    或标注@{@link Scope}({@link ConfigurableBeanFactory}.SCOPE_PROTOTYPE)
 *    将执行服务器启动时的步骤2->7
 *
 *    【不会】执行标记有@{@link OnContextInited}的方法！
 *

 * </pre>
 *
 * @author BlackCat
 * @since 2015-01-17
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnContextInited {

}
